package main

import "fmt"

func main() {
	//数组
	//指定存放数据类型、长度
	var a1 [3]bool //标准定义方法
	var a2 [5]int
	fmt.Printf("%T, %T\n", a1, a2) //[3]bool, [5]int  数组的存放类型和长度一起作为其类型！

	//数组初始化  默认元素都是0、0.0 false ""
	fmt.Println(a1) //可以直接pln
	fmt.Println(a2)

	//初始化1
	a3 := [3]bool{true, false, true}
	a4 := [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 8, 7, 6, 5, 4}
	fmt.Println(a3)
	fmt.Println(a4)
	fmt.Printf("a4: %T\n", a4) //a4: [15]int  [...]自动判断长度

	//初始化2
	a5 := [5]int{0: 1, 2: 5} //根据索引赋值  未指定都是默认值
	fmt.Println(a5)

	//数组遍历
	citys := [...]string{"bj", "sh", "hf", "sz"}
	for i := 0; i < len(citys); i++ { //根据索引
		fmt.Println(citys[i])
	}

	for i, v := range citys { //range(arr)  遍历
		fmt.Printf("%d, %s\n", i, v)
	}

	//多维数组
	var a11 [3][2]int       //标准定义方法
	fmt.Printf("%T\n", a11) //[3][2]int

	//初始化
	a11 = [3][2]int{
		[2]int{1, 2},
		[2]int{2, 3},
		[2]int{3, 4},
	}

	fmt.Println(a11)

	//数组是值类型！
	b1 := [3]int{1, 2, 3}
	b2 := b1 //赋值  不是赋给引用
	b2[0] = 100
	fmt.Println(b1, b2) //[1 2 3] [100 2 3]

}
